home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 20
/
Cream of the Crop 20 (Terry Blount) (1996).iso
/
os2
/
rsynth21.zip
/
english.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-11-08
|
17KB
|
614 lines
#include <config.h>
/* $Id: english.c,v 1.13 1994/11/08 13:30:50 a904209 Exp a904209 $
*/
char *english_id = "$Id: english.c,v 1.13 1994/11/08 13:30:50 a904209 Exp a904209 $";
/*
** English to Phoneme rules.
**
** Derived from:
**
** AUTOMATIC TRANSLATION OF ENGLISH TEXT TO PHONETICS
** BY MEANS OF LETTER-TO-SOUND RULES
**
** NRL Report 7948
**
** January 21st, 1976
** Naval Research Laboratory, Washington, D.C.
**
**
** Published by the National Technical Information Service as
** document "AD/A021 929".
**
**
**
** The Phoneme codes:
**
** IY bEEt IH bIt
** EY gAte EH gEt
** AE fAt AA fAther
** AO lAWn OW lOne
** UH fUll UW fOOl
** ER mURdER AX About
** AH bUt AY hIde
** AW hOW OY tOY
**
** p Pack b Back
** t Time d Dime
** k Coat g Goat
** f Fault v Vault
** TH eTHer DH eiTHer
** s Sue z Zoo
** SH leaSH ZH leiSure
** HH How m suM
** n suN NG suNG
** l Laugh w Wear
** y Young r Rate
** CH CHar j Jar
** WH WHere
**
**
** Rules are made up of four parts:
**
** The left context.
** The text to match.
** The right context.
** The phonemes to substitute for the matched text.
**
** Procedure:
**
** Seperate each block of letters (apostrophes included)
** and add a space on each side. For each unmatched
** letter in the word, look through the rules where the
** text to match starts with the letter in the word. If
** the text to match is found and the right and left
** context patterns also match, output the phonemes for
** that rule and skip to the next unmatched letter.
**
**
** Special Context Symbols:
**
** # One or more vowels
** : Zero or more consonants
** ^ One consonant.
** . One of B, D, V, G, J, L, M, N, R, W or Z (voiced
** consonants)
** % One of ER, E, ES, ED, ING, ELY (a suffix)
** (Found in right context only)
** + One of E, I or Y (a "front" vowel)
**
*/
/* Context definitions */
static char Anything[] = "";
/* No context requirement */
static char Nothing[] = " ";
/* Context is beginning or end of word */
static char Silent[] = "";
/* No phonemes */
#define LEFT_PART 0
#define MATCH_PART 1
#define RIGHT_PART 2
#define OUT_PART 3
typedef char *Rule[4];
/* Rule is an array of 4 character pointers */
/*0 = Punctuation */
/*
** LEFT_PART MATCH_PART RIGHT_PART OUT_PART
*/
static Rule punct_rules[] =
{
{Anything, " ", Anything, " "},
{Anything, "-", Anything, ""},
{".", "'S", Anything, "z"},
{"#:.E", "'S", Anything, "z"},
{"#", "'S", Anything, "z"},
{Anything, "'", Anything, ""},
{Anything, ",", Anything, " "},
{Anything, ".", Anything, " "},
{Anything, "?", Anything, " "},
{Anything, "!", Anything, " "},
{Anything, 0, Anything, Silent},
};
static Rule A_rules[] =
{
{Anything, "A", Nothing, "@"},
{Nothing, "ARE", Nothing, "0r"},
{Nothing, "AR", "O", "@r"},
{Anything, "AR", "#", "er"},
{"^", "AS", "#", "eIs"},
{Anything, "A", "WA", "@"},
{Anything, "AW", Anything, "O"},
{" :", "ANY", Anything, "eni"},
{Anything, "A", "^+#", "eI"},
{"#:", "ALLY", Anything, "@li"},
{Nothing, "AL", "#", "@l"},
{Anything, "AGAIN", Anything, "@gen"},
{"#:", "AG", "E", "IdZ"},
{Anything, "A", "^+:#", "&"},
{" :", "A", "^+ ", "eI"},
{Anything, "A", "^%", "eI"},
{Nothing, "ARR", Anything, "@r"},
{Anything, "ARR", Anything, "&r"},
{" :", "AR", Nothing, "0r"},
{Anything, "AR", Nothing, "3"},
{Anything, "AR", Anything, "0r"},
{Anything, "AIR", Anything, "er"},
{Anything, "AI", Anything, "eI"},
{Anything, "AY", Anything, "eI"},
{Anything, "AU", Anything, "O"},
{"#:", "AL", Nothing, "@l"},
{"#:", "ALS", Nothing, "@lz"},
{Anything, "ALK", Anything, "Ok"},
{Anything, "AL", "^", "Ol"},
{" :", "ABLE", Anything, "eIb@l"},
{Anything, "ABLE", Anything, "@b@l"},
{Anything, "ANG", "+", "eIndZ"},
{"^", "A", "^#", "eI"},
{Anything, "A", Anything, "&"},
{Anything, 0, Anything, Silent},
};
static Rule B_rules[] =
{
{Nothing, "BE", "^#", "bI"},
{Anything, "BEING", Anything, "biIN"},
{Nothing, "BOTH", Nothing, "b@UT"},
{Nothing, "BUS", "#", "bIz"},
{Anything, "BUIL", Anything, "bIl"},
{Anything, "B", Anything, "b"},
{Anything, 0, Anything, Silent},
};
static Rule C_rules[] =
{
{Nothing, "CH", "^", "k"},
{"^E", "CH", Anything, "k"},
{Anything, "CH", Anything, "tS"},
{" S", "CI", "#", "saI"},
{Anything, "CI", "A", "S"},
{Anything, "CI", "O", "S"},
{Anything, "CI", "EN", "S"},
{Anything, "C", "+", "s"},
{Anything, "CK", Anything, "k"},
{Anything, "COM", "%", "kVm"},
{Anything, "C", Anything, "k"},
{Anything, 0, Anything, Silent},
};
static Rule D_rules[] =
{
{"#:", "DED", Nothing, "dId"},
{".E", "D", Nothing, "d"},
{"#:^E", "D", Nothing, "t"},
{Nothing, "DE", "^#", "dI"},
{Nothing, "DO", Nothing, "du"},
{Nothing, "DOES", Anything, "dVz"},
{Nothing, "DOING", Anything, "duIN"},
{Nothing, "DOW", Anything, "daU"},
{Anything, "DU", "A", "dZu"},
{Anything, "D", Anything, "d"},
{Anything, 0, Anything, Silent},
};
static Rule E_rules[] =
{
{"#:", "E", Nothing, ""},
{"':^", "E", Nothing, ""},
{" :", "E", Nothing, "i"},
{"#", "ED", Nothing, "d"},
{"#:", "E", "D ", ""},
{Anything, "EV", "ER", "ev"},
{Anything, "E", "^%", "i"},
{Anything, "ERI", "#", "iri"},
{Anything, "ERI", Anything, "erI"},
{"#:", "ER", "#", "3"},
{Anything, "ER", "#", "er"},
{Anything, "ER", Anything, "3"},
{Nothing, "EVEN", Anything, "iven"},
{"#:", "E", "W", ""},
{"T", "EW", Anything, "u"},
{"S", "EW", Anything, "u"},
{"R", "EW", Anything, "u"},
{"D", "EW", Anything, "u"},
{"L", "EW", Anything, "u"},
{"Z", "EW", Anything, "u"},
{"N", "EW", Anything, "u"},
{"J", "EW", Anything, "u"},
{"TH", "EW", Anything, "u"},
{"CH", "EW", Anything, "u"},
{"SH", "EW", Anything, "u"},
{Anything, "EW", Anything, "ju"},
{Anything, "E", "O", "i"},
{"#:S", "ES", Nothing, "Iz"},
{"#:C", "ES", Nothing, "Iz"},
{"#:G", "ES", Nothing, "Iz"},
{"#:Z", "ES", Nothing, "Iz"},
{"#:X", "ES", Nothing, "Iz"},
{"#:J", "ES", Nothing, "Iz"},
{"#:CH", "ES", Nothing, "Iz"},
{"#:SH", "ES", Nothing, "Iz"},
{"#:", "E", "S ", ""},
{"#:", "ELY", Nothing, "li"},
{"#:", "EMENT", Anything, "ment"},
{Anything, "EFUL", Anything, "fUl"},
{Anything, "EE", Anything, "i"},
{Anything, "EARN", Anything, "3n"},
{Nothing, "EAR", "^", "3"},
{Anything, "EAD", Anything, "ed"},
{"#:", "EA", Nothing, "i@"},
{Anything, "EA", "SU", "e"},
{Anything, "EA", Anything, "i"},
{Anything, "EIGH", Anything, "eI"},
{Anything, "EI", Anything, "i"},
{Nothing, "EYE", Anything, "aI"},
{Anything, "EY", Anything, "i"},
{Anything, "EU", Anything, "ju"},
{Anything, "E", Anything, "e"},
{Anything, 0, Anything, Silent},
};
static Rule F_rules[] =
{
{Anything, "FUL", Anything, "fUl"},
{Anything, "F", Anything, "f"},
{Anything, 0, Anything, Silent},
};
static Rule G_rules[] =
{
{Anything, "GIV", Anything, "gIv"},
{Nothing, "G", "I^", "g"},
{Anything, "GE", "T", "ge"},
{"SU"